package cn.com.css.taxInspection.zdgz.service.impl;

import cn.com.css.taxInspection.common.constants.Constants;
import cn.com.css.taxInspection.gt3.entity.JcAjxxEntity;
import cn.com.css.taxInspection.gt3.service.DmGySwjgService;
import cn.com.css.taxInspection.gt3.service.JcAjxxService;
import cn.com.css.taxInspection.system.service.impl.HttpSessionService;
import cn.com.css.taxInspection.util.DateUtils;
import cn.com.css.taxInspection.util.TsBqUtils;
import cn.com.css.taxInspection.zdgz.entity.JaglYljamxEntity;
import cn.com.css.taxInspection.zdgz.mapper.JaglYljamxMapper;
import cn.com.css.taxInspection.zdgz.service.JaglYljamxService;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

@Service("JaglYljamxService")
public class JaglmxServiceImpl extends ServiceImpl<JaglYljamxMapper, JaglYljamxEntity> implements JaglYljamxService {

    @Resource
    private JcAjxxService jcAjxxService;

    @Resource
    private JaglYljamxService jaglYljamxService;

    @Resource
    private DmGySwjgService dmGySwjgService;

    @Resource
    private JaglYljamxMapper jaglYljamxMapper;

    @Resource
    private HttpSessionService httpSessionService;

    //保存导入的积案管理明细表数据
    @Override
    public int saveJaglData(List<String> allAjbhList) {
        List<JaglYljamxEntity> jaglYljamxEntityList = new ArrayList<>();
        for (String objects : allAjbhList) {
            JaglYljamxEntity jaglYljamxEntity = new JaglYljamxEntity();
            jaglYljamxEntity.setUuid(TsBqUtils.getUUID());
            String jcajbh = String.valueOf(objects).trim();
            jaglYljamxEntity.setJcajbh(jcajbh);
            jaglYljamxEntityList.add(jaglYljamxEntity);
        }
        //先更新基本信息
        jaglYljamxService.saveBatch(jaglYljamxEntityList);
        // 追加更新数据信息
        return jaglYljamxMapper.updateAllDataByJcajbh(allAjbhList);
    }

    @Override
    public IPage<JaglYljamxEntity> queryJaglmxData(JaglYljamxEntity jaglYljamxEntity) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Page<JaglYljamxEntity> page = new Page<>(jaglYljamxEntity.getPage(), jaglYljamxEntity.getLimit());
        LambdaQueryWrapper<JaglYljamxEntity> queryWrapper = Wrappers.lambdaQuery();
        //案源编号
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getJcajbh())) {
            queryWrapper.like(JaglYljamxEntity::getJcajbh, jaglYljamxEntity.getJcajbh());
        }
        //纳税人识别号
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getNsrsbh())) {
            queryWrapper.like(JaglYljamxEntity::getNsrsbh, jaglYljamxEntity.getNsrsbh());
        }
        //纳税人名称
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getNsrmc())) {
            queryWrapper.like(JaglYljamxEntity::getNsrmc, jaglYljamxEntity.getNsrmc());
        }
        //积案管理-立案时间
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getYljaLarqq())) {
            queryWrapper.between(JaglYljamxEntity::getLarq, sdf.parse(jaglYljamxEntity.getYljaLarqq()), sdf.parse(jaglYljamxEntity.getYljaLarqz()));
        }
        //一类积案-立案时间
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getYljaLarqq())) {
            queryWrapper.between(JaglYljamxEntity::getLarq, sdf.parse(jaglYljamxEntity.getYljaLarqq()), sdf.parse(jaglYljamxEntity.getYljaLarqz()));
        }
        //所属单位
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getSsdw())) {
            queryWrapper.like(JaglYljamxEntity::getSsdw, jaglYljamxEntity.getSsdw());
        }

        // 动态排序逻辑
        String sortField = jaglYljamxEntity.getSortField();
        String sortOrder = jaglYljamxEntity.getSortOrder();
        if (TsBqUtils.isNotNull(sortField) && TsBqUtils.isNotNull(sortOrder)) {
            // 排序字段白名单，避免 SQL 注入
            Map<String, SFunction<JaglYljamxEntity, ?>> fieldMap = new HashMap<>();
            fieldMap.put("jcajbh", JaglYljamxEntity::getJcajbh);
            fieldMap.put("nsrsbh", JaglYljamxEntity::getNsrsbh);
            fieldMap.put("nsrmc", JaglYljamxEntity::getNsrmc);
            fieldMap.put("larq", JaglYljamxEntity::getLarq);
            fieldMap.put("ajdrrq", JaglYljamxEntity::getAjdrrq);
            fieldMap.put("hysslx", JaglYljamxEntity::getHysslx);
            fieldMap.put("jaqlqszhj", JaglYljamxEntity::getJaqlqszhj);
            fieldMap.put("ajlx", JaglYljamxEntity::getAjlx);
            fieldMap.put("csjacy", JaglYljamxEntity::getCsjacy);
            fieldMap.put("sfqlwb", JaglYljamxEntity::getSfqlwb);
            fieldMap.put("clyj", JaglYljamxEntity::getClyj);
            fieldMap.put("jaszhj", JaglYljamxEntity::getJaszhj);
            fieldMap.put("srsk", JaglYljamxEntity::getSrsk);
            fieldMap.put("srznj", JaglYljamxEntity::getSrznj);
            fieldMap.put("srfk", JaglYljamxEntity::getSrfk);
            fieldMap.put("srxj", JaglYljamxEntity::getSrxj);
            fieldMap.put("rksk", JaglYljamxEntity::getRksk);
            fieldMap.put("rkznj", JaglYljamxEntity::getRkznj);
            fieldMap.put("rkfk", JaglYljamxEntity::getRkfk);
            fieldMap.put("rkxj", JaglYljamxEntity::getRkxj);
            fieldMap.put("xtdqajzt", JaglYljamxEntity::getXtdqajzt);
            fieldMap.put("yjqlrq", JaglYljamxEntity::getYjqlrq);
            fieldMap.put("jchjhs", JaglYljamxEntity::getJchjhs);
            fieldMap.put("slhjhs", JaglYljamxEntity::getSlhjhs);
            fieldMap.put("zxhjhs", JaglYljamxEntity::getZxhjhs);
            fieldMap.put("ssdw", JaglYljamxEntity::getSsdw);
            // 更多字段可以继续加
            if (fieldMap.containsKey(sortField)) {
                if ("asc".equalsIgnoreCase(sortOrder)) {
                    queryWrapper.orderByAsc(fieldMap.get(sortField));
                } else {
                    queryWrapper.orderByDesc(fieldMap.get(sortField));
                }
            } else {
                // 不合法字段，默认排序
                queryWrapper.orderByDesc(JaglYljamxEntity::getJcajbh);
            }
        } else {
            // 默认排序
            queryWrapper.orderByDesc(JaglYljamxEntity::getJcajbh);
        }
        return this.page(page, queryWrapper);
    }

    @Override
    public int updateYljamxDataByJcajbh(JaglYljamxEntity jaglYljamxEntity) {
        int result = 0;
        result += jaglYljamxMapper.updateByJcajbh(jaglYljamxEntity);
        return result;
    }

    @Override
    public int deleteData(List<String> jcajbhList) {
        int result = 0;
        result += jaglYljamxMapper.deleteData(jcajbhList);
        return result;
    }

    @Override
    public List<JaglYljamxEntity> exportYljamxTable(JaglYljamxEntity jaglYljamxEntity) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        LambdaQueryWrapper<JaglYljamxEntity> queryWrapper = Wrappers.lambdaQuery();
        //案源编号
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getJcajbh())) {
            queryWrapper.like(JaglYljamxEntity::getJcajbh, jaglYljamxEntity.getJcajbh());
        }
        //纳税人识别号
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getNsrsbh())) {
            queryWrapper.like(JaglYljamxEntity::getNsrsbh, jaglYljamxEntity.getNsrsbh());
        }
        //纳税人名称
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getNsrmc())) {
            queryWrapper.like(JaglYljamxEntity::getNsrmc, jaglYljamxEntity.getNsrmc());
        }
        //积案管理-立案时间
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getYljaLarqq())) {
            queryWrapper.between(JaglYljamxEntity::getLarq, sdf.parse(jaglYljamxEntity.getYljaLarqq()), sdf.parse(jaglYljamxEntity.getYljaLarqz()));
        }
        //一类积案-立案时间
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getYljaLarqq())) {
            queryWrapper.between(JaglYljamxEntity::getLarq, sdf.parse(jaglYljamxEntity.getYljaLarqq()), sdf.parse(jaglYljamxEntity.getYljaLarqz()));
        }
        //所属单位
        if (TsBqUtils.isNotNull(jaglYljamxEntity.getSsdw())) {
            queryWrapper.like(JaglYljamxEntity::getSsdw, jaglYljamxEntity.getSsdw());
        }
        queryWrapper.orderByDesc(JaglYljamxEntity::getJcajbh);
        return this.list(queryWrapper);
    }
}